package com.kurt.service;

import com.kurt.dto.query.SysOperLogQueryRequest;
import com.kurt.entity.SysOperLog;
import org.springframework.data.domain.Page;

import java.time.LocalDateTime;
import java.util.List;

/**
 * 操作日志服务接口
 */
public interface SysOperLogService extends BaseService<SysOperLog, String> {

    /**
     * 异步插入操作日志
     *
     * @param operLog 操作日志
     */
    void asyncInsertOperLog(SysOperLog operLog);

    /**
     * 同步插入操作日志
     *
     * @param operLog 操作日志
     * @return 操作日志
     */
    SysOperLog insertOperLog(SysOperLog operLog);

    /**
     * 根据操作人员查找日志
     *
     * @param operName 操作人员
     * @return 日志列表
     */
    List<SysOperLog> getLogsByOperName(String operName);

    /**
     * 根据业务类型查找日志
     *
     * @param businessType 业务类型
     * @return 日志列表
     */
    List<SysOperLog> getLogsByBusinessType(Integer businessType);

    /**
     * 根据操作状态查找日志
     *
     * @param status 操作状态
     * @return 日志列表
     */
    List<SysOperLog> getLogsByStatus(Integer status);

    /**
     * 根据操作时间范围查找日志
     *
     * @param startTime 开始时间
     * @param endTime   结束时间
     * @return 日志列表
     */
    List<SysOperLog> getLogsByTimeRange(LocalDateTime startTime, LocalDateTime endTime);

    /**
     * 根据操作人员和时间范围查找日志
     *
     * @param operName  操作人员
     * @param startTime 开始时间
     * @param endTime   结束时间
     * @return 日志列表
     */
    List<SysOperLog> getLogsByOperNameAndTimeRange(String operName, LocalDateTime startTime, LocalDateTime endTime);

    /**
     * 清理指定时间之前的日志
     *
     * @param operTime 操作时间
     * @return 清理的记录数
     */
    int cleanLogsBefore(LocalDateTime operTime);

    /**
     * 分页查询操作日志
     *
     * @return 分页结果
     */
    Page<SysOperLog> getLogsPage(SysOperLogQueryRequest request);

}
